var hijo;

$(document).ready(function(){

	// Oyentes de algunos de los botones de la pantalla
	$('#boton_nuevo_comercio').click(onClickBoton_nuevo_comercio);
	$('#boton_otro_nuevo_comercio').click(onClickBoton_nuevo_comercio);
	$('#boton_finalizar_nuevo_comercio').click(onClickBoton_finalizar_nuevo_comercio);
	$('#icono_cancelar_nuevo_comercio').click(onClickBoton_cancelar_nuevo_comercio);

	window.PixelAdmin.start(init);

	$('#wizard-forms .wizard-prev-step-btn').on('click', function () {
		$('#wizard-forms').pixelWizard('prevStep');
		return false;
	});

	// PASO 1: DETALLES
	$("#wizard-detalles").validate({
		ignore: '.ignore',
		focusInvalid: true,
		rules: {
			'nombre': {
				required: true,
				minlength: 2
			},
			'apellidos': {
				required: true,
				minlength: 2
			},
            'identificador': {
                required: true,
                minlength: 1,
            },
			'numLicencias': {
				required: true,
				number: true,
				min: 1,
			},
		},
		messages: {
			'nombre': {
				required: 'Debe introducir el nombre del propietario',
				minlength: 'Introduzca un nombre válido'
			},
			'apellidos' : {
				required: 'Debe introducir los apellidos del propietario',
				minlength: 'Introduzca unos apellidos válidos'
			},
            'identificador' : {
                required: 'Debe introducir el identificador del comercio',
                minlength: 'Introduzca un identificador válido',
            },
			'numLicencias' : {
				required: 'Debe introducir el número de licencias que dispondrá el comercio',
				number: 'Introduzca un número válido',
				min: 'Introduzca un número comprendido entre 1 y 100',
			}
		}
	});
	
	$('#wizard-detalles').on('submit', function () {
		if ($(this).valid()) {
			// Enviamos el nuevo comercio al servidor para que sea añadido
			registrarNuevoComercioEnServidor();
		}
		return false;
	});
				
/****************************************** TABLA PRODUCTOS *************************************/
	
	$('#contenedor_tabla_comercios').jtable({
		title: 'Comercios',
		paging: true, //Enable paging
        pageSize: 50, //Set page size (default: 10)
        openChildAsAccordion: true,
        sorting: true, //Enable sorting
        multiSorting: true,
        defaultSorting: 'idComercio ASC', //Set default sorting
		actions: {
				listAction: function (postData, jtParams) {
                    return $.Deferred(function ($dfd) {
                        $.ajax({
                        	url: '../../php/comercios/operacionesTablaComercios.php',
	                        type: 'POST',
	                        dataType: 'json',
	                        data: crearPeticionJsonTablaComercios(jtParams.jtStartIndex, jtParams.jtPageSize, jtParams.jtSorting),
                            success: function (data) {
                                $dfd.resolve(data);
                            },
                            error: function (data) {
                            	console.log(data);
                                $dfd.reject();
                            }
                        });
                    });
                },
                deleteAction: function (postData) {
                    console.log("deleting from custom function...");
                    return $.Deferred(function ($dfd) {
                        $.ajax({
                            url: 'PersonActions',
                            type: 'POST',
                            dataType: 'json',
                            data: postData,
                            success: function (data) {
                                $dfd.resolve(data);
                            },
                            error: function () {
                                $dfd.reject();
                            }
                        });
                    });
                },
                updateAction: function(postData) {
                    console.log("updating from custom function...");
                    return $.Deferred(function ($dfd) {
                        $.ajax({
                            url: '../../php/productos/operacionesTablaProductos.php',
	                        type: 'POST',
	                        dataType: 'json',
	                        data: crearPeticionJsonActualizarProductos(postData),
                            success: function (data) {
                                $dfd.resolve(data);
                            },
                            error: function (data) {
                                $dfd.reject();
                                console.log(data)
                            }
                        });
                    });
                }
		},
		fields:{
			dispositivos:{
				title: '',
                width: '1%',
                sorting: false,
                edit: false,
                create: false,
                display: function (dispositivos) {
                    // Imagen de la columna
                    var $img = $('<div align="center"><i class="fa fa-plus-square text-lg"></i></div>');
                    // Abre el hijo cuando pinchamos en la imagen
                    $img.click(function () {
                        $('#contenedor_tabla_comercios').jtable('openChildTable',
                                $img.closest('tr'),
                                {
                                    title: 'Dispositivos asociados al comercio',
                                    sorting: true,
                                    defaultSorting: 'numTerminal ASC', 
                                    actions: {
                                        listAction: function (postData, jtParams) {
                                            return $.Deferred(function ($dfd) {
                                                $.ajax({
                                                    url: '../../php/comercios/operacionesTablaComercios.php',
                                                    type: 'POST',
                                                    dataType: 'json',
                                                    data: crearPeticionJsonListarDispositivos(dispositivos.record.idComercio, 'numTerminal ASC'),
                                                    success: function (data) {
                                                        $dfd.resolve(data);
                                                    },
                                                    error: function (data) {
                                                        console.log(data);
                                                        $dfd.reject();
                                                    }
                                                });
                                            });
                                        }
                                    },
                                    fields: {
                                        idTerminal: {
                                            title: 'IMEI',
                                            key: true,
                                            listClass: 'campoCentrado',
                                            width: '30%',
                                            sorting: false,

                                        },
                                        numTerminal: {
                                            title: 'Nº Terminal',
                                            width: '10%',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                        },
                                        pin: {
                                            title: 'Pin por defecto',
                                            width: '10%',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                        },
                                        versionApk: {
                                            title: 'Versión APK',
                                            width: '10%',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                        },
                                        fechaCaducidad: {
                                            title: 'Fecha expiración licencia',
                                            width: '20%',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                        },
                                        editar:{
                                            title: '',
                                            width: '5%',
                                            sorting: false,
                                            display: function (data) {
                                                var $editar = $('<div align="center" id="' + data.record.idTerminal + '"><a href="#"><i class="fa fa-edit text-default text-lg"></a></div>');
                                                $editar.click(onClickEditarDispositivo);
                                                return $editar;
                                            }
                                        },
                                        eliminar:{
                                            title: '',
                                            width: '5%',
                                            sorting: false,
                                            display: function (data) {
                                                var $eliminar = $('<div align="center" id="' + data.record.idTerminal + '"><a href="#"><i class="fa fa-trash-o text-default text-lg"></a></div>');
                                                $eliminar.click(onClickEliminarDispositivo);
                                                return $eliminar;
                                            }
                                        }
                                    }
                                }, function (data) { //opened handler
                                    data.childTable.jtable('load');
                                    hijo = data;
                                });
                    });
                    //Return image to show on the person row
                    return $img;
                }
			},
			idComercio: {
				key: true,
				title: 'ID',
				width: '10%',
				listClass: 'campoCentrado',
			},
			nombre: {
				title: 'Nombre',
				width: '10%',
				sorting: false,
			},
			apellidos: {
				title: 'Apellidos',
				width: '20%',
				sorting: false,
			},
			email: {
				title: 'Email',
				width: '20%',
				sorting: false
			},
			password: {
				title: 'Contraseña',
				width: '10%',
				sorting: false,
			},
			numLicencias: {
				title: 'Nº Licencias',
				width: '10%',
				listClass: 'campoCentrado',
				sorting: false
			},
			registrado: {
				title: 'Registro',
				width: '10%',
				listClass: 'campoCentrado',
				display: function (data) {
					// Vemos si se ha completado el registro o no
					if (data.record.registrado == "SI") {
						return '<div align="center"><a href="#" class="label label-success">&nbsp; Completo &nbsp;</a></div>';
					}else{
						return '<div align="center"><a href="#" class="label label-warning">Incompleto </a></div>';
					}
				},
				sorting: false
			},
			editar:{
				title: '',
				width: '5%',
				sorting: false,
				display: function (data) {
					var $editar = $('<div align="center" id="' + data.record.idComercio + '"><a href="#"><i class="fa fa-edit text-default text-lg"></a></div>');
					$editar.click(onClickEditarComercio);
					return $editar;
			    }
			},
			eliminar:{
				title: '',
				width: '5%',
				sorting: false,
				display: function (data) {
					var $eliminar = $('<div align="center" id="' + data.record.idComercio + '"><a href="#"><i class="fa fa-trash-o text-default text-lg"></a></div>');
			    	$eliminar.click(onClickEliminarComercio);
					return $eliminar;
			    }
			}
		}
	});

	// Cargamos la tabla desde el servidor
	$('#contenedor_tabla_comercios').jtable('load');
});

// Método encargado de realizar el post correspondiente para listar los productos en la tabla
function crearPeticionJsonTablaComercios(inicio, tamPagina, ordenacion){
    informacionJson = {};
    datosPeticionComercios = {};
    datosPeticionComercios.accion = 'listarComercios';
    datosPeticionComercios.tipoFormulario = 'tabla_comercios';
    datosPeticionComercios.tokenCSRF = $('#comercios_tabla_token_CSRF').val();
	datosPeticionComercios.inicio = inicio; 
	datosPeticionComercios.tamPagina = tamPagina; 
    datosPeticionComercios.ordenacion = ordenacion;     
    informacionJson.datosPostComercios = datosPeticionComercios;
    informacionJson.peticionAjax = 'SI';
    return informacionJson;
}

// Método encargado de realizar el post correspondiente para listar dispositivos asociados a un terminado comercio
function crearPeticionJsonListarDispositivos(idComercio, ordenacion){
    informacionJson = {};
    datosPeticionComercios = {};
    datosPeticionComercios.accion = 'listarDispositivos';
    datosPeticionComercios.tipoFormulario = 'tabla_comercios';
    datosPeticionComercios.tokenCSRF = $('#comercios_tabla_token_CSRF').val();
    datosPeticionComercios.idComercio = idComercio; 
    datosPeticionComercios.ordenacion = ordenacion; 
    informacionJson.datosPostComercios = datosPeticionComercios;
    informacionJson.peticionAjax = 'SI';
    return informacionJson;
}

// Método encargado de realizar el post para registrar un comercio en el servidor
function registrarNuevoComercioEnServidor(){
    $.ajax({
        url: '../../php/comercios/operacionesTablaComercios.php',
        type: 'POST',
        dataType: 'json',
        data: crearPeticionJsonRegistraNuevoComercio(),
        success: function (data) {
        	// Recargamos la tabla
    		$('#contenedor_tabla_comercios').jtable('load');
    		// Vemos si se ha producido error
    		if(data['Resultado'] == "OK"){
    			resultado = $('<i class="fa fa-check-circle text-success text-xlg"></i>&nbsp;<span class="text-lg text-slim text-muted"> Comercio añadido correctamente</span>');
    		}else{
    			// Vemos si no ha sido por clave duplicada
    			if(data['Mensaje'].search('Duplicate entry') == -1){
    				resultado = $('<i class="fa fa-times-circle text-danger text-xlg"></i>&nbsp;<span class="text-lg text-slim text-muted"> Error al añadir el comercio, inténtelo de nuevo más tarde</span>');
    			}else{
    				resultado = $('<i class="fa fa-times-circle text-danger text-xlg"></i>&nbsp;<span class="text-lg text-slim text-muted"> Error al añadir el comercio, el identificador de comercio ya está en uso</span>');
    			}
    		}

    		$('#mensaje-confirmacion-nuevo-comercio').empty();
			$('#mensaje-confirmacion-nuevo-comercio').append(resultado);

			// Mostramos el resumen del nuevo comercio
			mostrarResumenNuevoComercio();

			$('#wizard-forms').pixelWizard('nextStep');
        },
        error: function (data) {
            console.log(data)
        }
    });
}

// Método encargado de realizar el json correspondiente para registrar un nuevo comercio en el servidor
function crearPeticionJsonRegistraNuevoComercio(){
    informacionJson = {};
    datosPeticionComercios = {};
    datosPeticionComercios.accion = 'registrarNuevoComercio';
    datosPeticionComercios.tipoFormulario = 'tabla_comercios';
    datosPeticionComercios.tokenCSRF = $('#comercios_tabla_token_CSRF').val();

    // Datos del nuevo comercio
    datosPeticionComercios.nombre = $("input[name='nombre']").val();
    datosPeticionComercios.apellidos = $("input[name='apellidos']").val();
    datosPeticionComercios.identificador = $("input[name='identificador']").val();
    datosPeticionComercios.numLicencias = $("input[name='numLicencias']").val();

    informacionJson.datosPostComercios = datosPeticionComercios;
    informacionJson.peticionAjax = 'SI';

    return informacionJson;
}

// Método encargado de mostrar el resumen del comercio que se acaba de añadir
function mostrarResumenNuevoComercio(){
	$("input[name='nombreResumen']").val($("input[name='nombre']").val());
	$("input[name='apellidosResumen']").val($("input[name='apellidos']").val());
    $("input[name='identificadorResumen']").val($("input[name='identificador']").val());
	$("input[name='numLicenciasResumen']").val($("input[name='numLicencias']").val());
}

// Método encargado de realizar el post para editar un producto
function onClickEditarComercio(){
    // Obtenemos el idComercio y el idProducto del label del atributo id
    idProducto = $(this).attr('id');

    $.growl.error({ title:"Funcionalidad no disponible", message: "Esta funcionalidad no está disponible para la versión beta." });
}

// Método encargado de eliminar un producto
function onClickEliminarComercio(){
   	// Obtenemos el idCabecera del name del icono
	$idComercio = $(this).attr('id');
    // Enviamos Post al Servidor
    enviarPeticionEliminarComercio($idComercio);
}

function enviarPeticionEliminarComercio(idComercio){
    datosEnvioPeticionEliminarComercio = {};
    datosEnvioPeticionEliminarComercio.accion = 'eliminarComercio';
    datosEnvioPeticionEliminarComercio.tipoFormulario = 'tabla_comercios';
    datosEnvioPeticionEliminarComercio.tokenCSRF = $('#comercios_tabla_token_CSRF').val();
    datosEnvioPeticionEliminarComercio.idComercio = idComercio;

    $.post("../../php/comercios/operacionesTablaComercios.php", {datosPostComercios: JSON.stringify(datosEnvioPeticionEliminarComercio)}, callbackPeticionEliminarComercioExito).fail(failPostPeticionEliminarComercio);
}

function callbackPeticionEliminarComercioExito(data){
	// Actualizamos la tabla para que se vea reflejado
	$('#contenedor_tabla_comercios').jtable('reload');
	// Notificamos al usuario de que se ha eliminado el producto con éxito
	$.growl.notice({ title:"Comercio eliminado", message: "El comercio ha sido eliminado de forma permanente junto a sus dispositivos asociados." });
	console.log(data);
}

function failPostPeticionEliminarComercio(data){
	console.log(data);
}

// Método encargado de realizar el post para editar un dispositivo
function onClickEditarDispositivo(){
    // Obtenemos el idComercio y el idProducto del label del atributo id
    idProducto = $(this).attr('id');

    $.growl.error({ title:"Funcionalidad no disponible", message: "Esta funcionalidad no está disponible para la versión beta." });
}

// Método encargado de eliminar un dispositivo
function onClickEliminarDispositivo(){
    // Obtenemos el idCabecera del name del icono
    $idDispositivo = $(this).attr('id');
    // Enviamos Post al Servidor
    enviarPeticionEliminarDispositivo($idDispositivo);
}

function enviarPeticionEliminarDispositivo(idDispositivo){
    datosEnvioPeticionEliminarDispositivo = {};
    datosEnvioPeticionEliminarDispositivo.accion = 'eliminarDispositivo';
    datosEnvioPeticionEliminarDispositivo.tipoFormulario = 'tabla_comercios';
    datosEnvioPeticionEliminarDispositivo.tokenCSRF = $('#comercios_tabla_token_CSRF').val();
    datosEnvioPeticionEliminarDispositivo.idDispositivo = idDispositivo;
    
    // Realizamos la peticion POST con el JSON de parametro
    $.post("../../php/comercios/operacionesTablaComercios.php", {datosPostComercios: JSON.stringify(datosEnvioPeticionEliminarDispositivo)}, callbackPeticionEliminarDispositivoExito).fail(failPostPeticionEliminarDispositivo);
}

function callbackPeticionEliminarDispositivoExito(data){
    // Actualizamos la tabla para que se vea reflejado
    hijo.childTable.jtable('load');
    // Notificamos al usuario de que se ha eliminado el producto con éxito
    $.growl.notice({ title:"Dispositivo eliminado", message: "El dispositivo ha sido eliminado de forma permanente." });
    console.log(data);
}

function failPostPeticionEliminarDispositivo(data){
    console.log(data);
}

/****************************************** ON CLICK BOTONES *************************************/

function onClickBoton_nuevo_comercio() {
	event.preventDefault();
	reiniciar_campos_nuevo_comercio();
	$("#formulario_nuevo_comercio").show();
	$('#wizard-forms').pixelWizard('setCurrentStep', 1);
}

function reiniciar_campos_nuevo_comercio() {
	$("input[name='nombre']").val("");
	$("input[name='apellidos']").val("");
	$("input[name='identificador']").val("");
	$("input[name='numLicencias']").val("1");
}

function onClickBoton_finalizar_nuevo_comercio() {
	event.preventDefault();
	$("#formulario_nuevo_comercio").hide();
	$('#wizard-forms').pixelWizard('setCurrentStep', 1);
}

function onClickBoton_cancelar_nuevo_comercio() {
	event.preventDefault();
	reiniciar_campos_nuevo_comercio();
	$("#formulario_nuevo_comercio").hide();
	$('#wizard-forms').pixelWizard('setCurrentStep', 1);
}




